// index.js
const cartUtils = require('../../utils/cartUtils');

Page({
  data: {
    banners: [],
    categories: [],
    hotItems: [],
    loading: true,
    cartItems: {}, // 存储购物车数量，格式为 {food_id: count}
    hasCartItems: false // 标记购物车是否有商品
  },
  
  onLoad: function() {
    // 页面加载时获取数据
    this.getHomeData();
    // 获取购物车数据
    this.getCartData();
  },
  
  onShow: function() {
    // 页面显示时刷新购物车数据
    this.getCartData();
  },
  
  onPullDownRefresh: function() {
    // 下拉刷新
    this.getHomeData(() => {
      this.getCartData();
      wx.stopPullDownRefresh();
    });
  },
  
  // 获取购物车数据
  getCartData: function() {
    const app = getApp();
    const userInfo = app.globalData.userInfo;
    
    // 如果未登录，使用本地购物车数据
    if (!userInfo) {
      // 获取本地购物车数据
      const localCart = cartUtils.getLocalCart();
      const cartItems = {};
      let totalItems = 0;
      
      // 统计本地购物车数据
      localCart.forEach(item => {
        if (item.count > 0) {
          cartItems[item.food] = item.count;
          totalItems += item.count;
        }
      });
      
      this.setData({
        cartItems: cartItems,
        hasCartItems: totalItems > 0
      });
      
      return;
    }
    
    // 已登录，从服务器获取购物车数据
    app.globalData.api.cart.getList()
      .then(res => {
        const cartItems = {};
        let totalItems = 0;
        
        // 只处理数量大于0的购物车项目
        (res.results || []).forEach(item => {
          if (item.count > 0) {
            cartItems[item.food] = item.count;
            totalItems += item.count;
          }
        });
        
        // 如果购物车为空，清除购物车数据
        if (totalItems === 0) {
          this.setData({
            cartItems: {},
            hasCartItems: false
          });
        } else {
          this.setData({ 
            cartItems,
            hasCartItems: true
          });
        }
        
        console.log('当前购物车数据:', cartItems, '是否有商品:', totalItems > 0);
      })
      .catch(err => {
        console.error('获取购物车数据失败', err);
      });
  },
  
  // 获取首页数据
  getHomeData: function(callback) {
    this.setData({ loading: true });
    
    const app = getApp();
    app.globalData.api.home.getData()
      .then(res => {
        console.log('首页数据返回:', res);
        
        // 处理图片URL，确保都是完整路径
        // 处理轮播图
        const banners = (res.banners || []).map(banner => {
          if (banner.image_url) {
            // 优先使用服务器提供的完整URL
            banner.image = banner.image_url;
          } else if (banner.image) {
            banner.image = app.globalData.api.getFullImageUrl(banner.image);
          }
          return banner;
        });
        
        // 处理分类图标
        const categories = (res.categories || []).map(category => {
          if (category.icon_url) {
            // 优先使用服务器提供的完整URL
            category.icon = category.icon_url;
          } else if (category.icon) {
            category.icon = app.globalData.api.getFullImageUrl(category.icon);
          }
          return category;
        });
        
        // 处理热门商品图片
        const hotItems = (res.hot_items || []).map(item => {
          if (item.image_url) {
            // 优先使用服务器提供的完整URL
            item.image = item.image_url;
          } else if (item.image) {
            item.image = app.globalData.api.getFullImageUrl(item.image);
          }
          return item;
        });
        
        this.setData({
          banners: banners,
          categories: categories,
          hotItems: hotItems,
          loading: false
        });
        
        if (callback) callback();
      })
      .catch(err => {
        console.error('获取首页数据失败', err);
        this.setData({ loading: false });
        
        wx.showToast({
          title: '获取数据失败',
          icon: 'none'
        });
        
        if (callback) callback();
      });
  },
  
  // 跳转到搜索页面
  goToSearch: function() {
    wx.navigateTo({
      url: '/pages/search/search'
    });
  },
  
  // 跳转到菜品分类
  goToCategory: function(e) {
    const id = e.currentTarget.dataset.id;
    wx.switchTab({
      url: '/pages/category/category'
    });
    
    // 由于switchTab不能携带参数，保存分类ID，在分类页面的onShow中获取
    getApp().globalData.selectedCategoryId = id;
  },
  
  // 跳转到菜品详情
  goToDetail: function(e) {
    const foodId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/detail/detail?id=${foodId}`
    });
  },
  
  // 添加到购物车
  addToCart: function (e) {
    // 已经使用catchtap绑定，不需要再阻止冒泡
    
    const app = getApp();
    const userInfo = app.globalData.userInfo;
    const foodId = e.currentTarget.dataset.id;
    
    // 获取当前商品的完整信息
    const foodItem = this.data.hotItems.find(item => item.id === foodId);
    if (!foodItem) {
      wx.showToast({
        title: '商品不存在',
        icon: 'none'
      });
      return;
    }
    
    // 检查是否登录
    if (!userInfo) {
      // 未登录，使用本地购物车
      cartUtils.addToLocalCart(foodItem);
      
      // 更新当前页面的购物车数据
      this.getCartData();
      
      wx.showToast({
        title: '已加入购物车',
        icon: 'success'
      });
      
      return;
    }
    
    // 已登录，使用服务器购物车
    // 获取当前购物车中商品数量
    const cartItems = {...this.data.cartItems};
    const count = (cartItems[foodId] || 0) + 1;
    
    // 调用API添加到购物车
    app.globalData.api.cart.add({ food: foodId, count: 1 })
      .then(res => {
        // 更新本地购物车数据
        cartItems[foodId] = count;
        
        // 更新购物车状态和"去购物车结算"按钮状态
        this.setData({ 
          cartItems,
          hasCartItems: true // 添加商品时直接将hasCartItems设为true
        });
        
        wx.showToast({
          title: '已加入购物车',
          icon: 'success'
        });
        
        // 重新获取购物车数据以确保一致性
        this.getCartData();
      })
      .catch(err => {
        console.error('添加到购物车失败', err);
        wx.showToast({
          title: '添加失败',
          icon: 'none'
        });
      });
  },
  
  // 从购物车减少商品
  minusFromCart: function(e) {
    // 已经使用catchtap绑定，不需要再阻止冒泡
    
    const app = getApp();
    const userInfo = app.globalData.userInfo;
    const foodId = e.currentTarget.dataset.id;
    
    // 检查是否登录
    if (!userInfo) {
      // 未登录，从本地购物车减少商品
      const currentCount = cartUtils.getLocalCartItemCount(foodId);
      if (currentCount <= 0) return;
      
      // 更新本地购物车商品数量
      cartUtils.updateLocalCartItemCount(foodId, currentCount - 1);
      
      // 更新当前页面的购物车数据
      this.getCartData();
      
      return;
    }
    
    // 已登录，从服务器购物车减少商品
    // 获取当前购物车中商品数量
    const cartItems = {...this.data.cartItems};
    const count = cartItems[foodId] - 1;
    
    // 不使用update方法，而是直接使用add方法传递负数数量
    app.globalData.api.cart.add({ food: foodId, count: -1 })
      .then(res => {
        if (count === 0) {
          // 从本地购物车中删除
          delete cartItems[foodId];
        } else {
          // 更新本地购物车数量
          cartItems[foodId] = count;
        }
        
        // 更新购物车状态和"去购物车结算"按钮状态
        this.setData({ 
          cartItems,
          hasCartItems: Object.keys(cartItems).length > 0
        });
        
        // 重新获取购物车数据以确保一致性
        this.getCartData();
      })
      .catch(err => {
        console.error('更新购物车失败', err);
        wx.showToast({
          title: '操作失败',
          icon: 'none'
        });
      });
  },
  
  // 搜索菜品
  onSearch: function(e) {
    const keyword = e.detail.value;
    if (keyword.trim()) {
      wx.navigateTo({
        url: `/pages/search/search?keyword=${encodeURIComponent(keyword)}`
      });
    }
  },
  
  // 前往购物车页面
  goToCart: function() {
    wx.switchTab({
      url: '/pages/cart/cart'
    });
  }
})
